using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._Statistics
{
    /// <summary>
    /// <para>LAS Point Statistics By Area</para>
    /// <para>Evaluates the statistics of LAS points that overlay the area defined by polygon features.</para>
    /// <para>评估覆盖面要素定义区域的 LAS 点的统计数据。</para>
    /// </summary>    
    [DisplayName("LAS Point Statistics By Area")]
    public class LasPointStatsByArea : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public LasPointStatsByArea()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_las_dataset">
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// </param>
        /// <param name="_in_features">
        /// <para>Input Polygons</para>
        /// <para>The polygon that defines the area for which statistics will be reported.</para>
        /// <para>定义将报告统计数据的区域的面。</para>
        /// </param>
        public LasPointStatsByArea(object _in_las_dataset, object _in_features)
        {
            this._in_las_dataset = _in_las_dataset;
            this._in_features = _in_features;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "LAS Point Statistics By Area";

        public override string CallName => "3d.LasPointStatsByArea";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_las_dataset, _in_features, _out_property, _output_polygons];

        /// <summary>
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_las_dataset { get; set; }


        /// <summary>
        /// <para>Input Polygons</para>
        /// <para>The polygon that defines the area for which statistics will be reported.</para>
        /// <para>定义将报告统计数据的区域的面。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Polygons")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Output Property</para>
        /// <para><xdoc>
        ///   <para>The properties that will be calculated.</para>
        ///   <bulletList>
        ///     <bullet_item>Minimum Z—The lowest Z value of LAS points overlapping the feature.</bullet_item><para/>
        ///     <bullet_item>Maximum Z—The highest Z value of LAS points overlapping the feature.</bullet_item><para/>
        ///     <bullet_item>Average Z—The average Z value of LAS points overlapping the feature.</bullet_item><para/>
        ///     <bullet_item>LAS Point Count—The tally of LAS points that were evaluated.</bullet_item><para/>
        ///     <bullet_item>Standard Deviation—The standard deviation of Z values.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将要计算的属性。</para>
        ///   <bulletList>
        ///     <bullet_item>最小 Z - 与要素重叠的 LAS 点的最低 Z 值。</bullet_item><para/>
        ///     <bullet_item>最大 Z - 与要素重叠的 LAS 点的最高 Z 值。</bullet_item><para/>
        ///     <bullet_item>平均 Z - 与要素重叠的 LAS 点的平均 Z 值。</bullet_item><para/>
        ///     <bullet_item>LAS 点计数 - 已评估的 LAS 点的计数。</bullet_item><para/>
        ///     <bullet_item>标准差 （Standard Deviation） - Z 值的标准差。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Property")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _out_property { get; set; } = null;


        /// <summary>
        /// <para>Updated Input Polygons</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Polygons")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_polygons { get; set; }


        public LasPointStatsByArea SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}